// 版权归 Epic Games, Inc. 所有。保留所有权利。

#include "ApplyFrontendPerfSettingsAction.h"

#include "Settings/LyraSettingsLocal.h"

#include UE_INLINE_GENERATED_CPP_BY_NAME(ApplyFrontendPerfSettingsAction)

struct FGameFeatureActivatingContext;
struct FGameFeatureDeactivatingContext;

//////////////////////////////////////////////////////////////////////
// UApplyFrontendPerfSettingsAction

// 游戏用户设置（以及它们驱动的引擎性能/可伸缩性设置）是全局的，
// 因此在多人 PIE 中跟踪每个世界没有意义：我们只在任何 PIE 世界处于菜单中时应用它。
//
// 但是，默认情况下，除非开发者设置 ApplyFrontEndPerformanceOptionsInPIE 已启用，
// 否则我们不会在编辑器中应用前端性能相关的内容
int32 UApplyFrontendPerfSettingsAction::ApplicationCounter = 0; // 初始化静态应用计数器

/**
 * 当游戏功能激活时调用
 * @param Context 游戏功能激活上下文
 */
void UApplyFrontendPerfSettingsAction::OnGameFeatureActivating(FGameFeatureActivatingContext& Context)
{
	ApplicationCounter++; // 增加应用计数器
	if (ApplicationCounter == 1) // 如果是第一个激活的实例
	{
		ULyraSettingsLocal::Get()->SetShouldUseFrontendPerformanceSettings(true); // 设置应使用前端性能设置
	}
}

/**
 * 当游戏功能取消激活时调用
 * @param Context 游戏功能取消激活上下文
 */
void UApplyFrontendPerfSettingsAction::OnGameFeatureDeactivating(FGameFeatureDeactivatingContext& Context)
{
	ApplicationCounter--; // 减少应用计数器
	check(ApplicationCounter >= 0); // 检查计数器是否非负

	if (ApplicationCounter == 0) // 如果没有激活的实例了
	{
		ULyraSettingsLocal::Get()->SetShouldUseFrontendPerformanceSettings(false); // 设置不应使用前端性能设置
	}
}